package top.lidee.common.service;

import com.baomidou.mybatisplus.extension.service.IService;
import top.lidee.common.dto.StoreDto;
import top.lidee.common.dto.UserInfo;
import top.lidee.framework.exception.BusinessCheckException;
import top.lidee.framework.pagination.PaginationRequest;
import top.lidee.framework.pagination.PaginationResponse;
import top.lidee.framework.result.PageUtils;
import top.lidee.framework.result.ResponseResult;
import top.lidee.repository.model.MtStore;
import top.lidee.repository.model.twice.vo.applet.AddStoreLicenseInformationVo;
import top.lidee.repository.model.twice.vo.applet.UpdateByStoreVo;
import top.lidee.repository.model.twice.vo.management.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 店铺业务接口
 *
 * Created by FSQ
 * CopyRight https://www.lidee.top
 */
public interface StoreService extends IService<MtStore> {

    /**
     * 分页查询店铺列表
     *
     * @param paginationRequest
     * @return
     */
    PaginationResponse<StoreDto> queryStoreListByPagination(PaginationRequest paginationRequest,Integer managerId) throws BusinessCheckException;

    /**
     * 保存店铺信息
     *
     * @param  reqStoreDto
     * @throws BusinessCheckException
     */
    MtStore saveStore(StoreDto reqStoreDto) throws BusinessCheckException;

    /**
     * 获取系统默认店铺
     *
     * @throws BusinessCheckException
     * @return
     */
    MtStore getDefaultStore(String merchantNo) throws BusinessCheckException;

    /**
     * 根据店铺ID获取店铺信息
     *
     * @param  id 店铺ID
     * @throws BusinessCheckException
     * @return
     */
    MtStore queryStoreById(Integer id) throws BusinessCheckException;

    /**
     * 根据店铺名称获取店铺信息
     *
     * @param  storeName 店铺名称
     * @throws BusinessCheckException
     */
    StoreDto queryStoreByName(String storeName) throws BusinessCheckException;

    /**
     * 根据店铺ID查询店铺信息
     *
     * @param  id 店铺ID
     * @return
     * @throws BusinessCheckException
     */
    StoreDto queryStoreDtoById(Integer id) throws BusinessCheckException;

    /**
     * 更新店铺状态
     *
     * @param  id       店铺ID
     * @param  operator 操作人
     * @param  status   状态
     * @throws BusinessCheckException
     */
    void updateStatus(Integer id, String operator, String status) throws BusinessCheckException;

    /**
     * 根据条件查询店铺列表
     *
     * @param params 查询参数
     * @return
     * */
    List<MtStore> queryStoresByParams(Map<String, Object> params) throws BusinessCheckException;

    /**
     * 根据距离远近查找店铺
     *
     * @param merchantNo 商户号
     * @param keyword 关键字
     * @param latitude 维度
     * @param longitude 经度
     * @return
     * */
    List<MtStore> queryByDistance(String merchantNo, String keyword, String latitude, String longitude) throws BusinessCheckException;

    /**
     * 获取店铺名称
     *
     * @param storeIds 店铺ID
     * @return
     * */
    String getStoreNames(String storeIds);

    //=====================================================================


    PageUtils searchAllStatusInfo(Map<String, Object> params);

    SearchAllStatusInfoVo searchWaitPass(Integer storeId);

    //=================================applet进件相关===================================

    /**
     * @description 证照信息第一步校验
     * @param vo
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/8 19:16
     */
    ResponseResult asliSubjectDataACard(ASLISubjectDataACardVo vo);

    /**
     * @description 证照信息第二步校验
     *        经营资料
     * @param vo
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/9 08:57
     */
    ResponseResult businessInformationCheck(BusinessInformationCheckVo vo);

    /**
     * @description 证照信息第三步校验
     *      * 结算银行账户
     * @param vo
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/9 09:05
     */
    ResponseResult settlementBankCheck(SettlementBankCheckVo vo);

    /**
     * @description 新增店铺基本信息和证照信息
     * @param vo
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/9/24 14:02
     */
    ResponseResult uploadLicense(AddStoreLicenseInformationVo vo);


    /**
     * @description 根据id查询当前店铺可以修改的信息
     * @param storeId
     * @param merchantId
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/9/27 01:07
     */
    ResponseResult getStoreLicenseInformationById(Integer storeId, Integer merchantId,String type);

    /**
     * @description 根据id修改当前店铺 如果审核状态为进件中状态则不能修改，如果为人工审核成功状态则查询纳入审核
     * @param vo
     * @param
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/9/27 09:40
     */
    ResponseResult updateByStore(UpdateByStoreVo vo);



    /**
     * @description 1.描述：根据选中的分类并且需要特殊资质时，查询出需要哪些特殊资质图片，至少传一张
     *      * 2.入参：
     *      *  1）选中的主体类型值0个体户，1企业，2小微/个人（用于微信主体类型（哪个主体类型店铺必须传,至少传一张））
     *      *  2）选中的二级类目id
     * @param principalType
     * @param cateId
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/7 20:16
     */
    ResponseResult getSpecialMapByTypeACateId(String principalType, Integer cateId);

    /**
     * @description 中国各大银行集合
     * @param userInfo
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/7 20:50
     */
    ResponseResult getRedliningList();


    /**
     * @description 新增店铺基本信息
     * @param vo
     * @param merchantId
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/11 13:40
     */
    ResponseResult addStoreBasicInformation(AddStoreBasicInformationVo vo, Integer merchantId);

    /**
     * @description 增加当前店铺的结算银行账户信息
     * @param vo
     * @return top.lidee.framework.result.ResponseResult
     * @author zhangyiheng
     * @date 2024/10/21 15:12
     */
    ResponseResult saveSettlementAccount( SettlementBankCheckVo vo);
}
